//go:build windows
// +build windows

package cmdutil

import (
	"bytes"
	"golang.org/x/sys/windows"
	"golang.org/x/text/encoding/unicode"
	"golang.org/x/text/transform"
)

func decodeBytes(b *bytes.Buffer) string {
	if b.Len()%2 != 0 {
		return b.String()
	}
	found := false
	for _, v := range b.Bytes() {
		if v == 0x00 {
			found = true
			break
		}
	}
	if !found {
		return b.String()
	}
	enc := unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM)
	bb, _, err := transform.Bytes(enc.NewDecoder(), b.Bytes())
	if err != nil {
		return b.String()
	}
	return string(bb)
}

// SetConsoleOutputCP 调用windows API函数设置控制台输出使用的字符集。
// cp-code page，常见值：65001-UTF8 ；936-GBK，它向下兼容GB2312；437-ASCII；
// 1200-UTF16LE，也就是Unicode编码的小端字节序 ；1201-UTF16BE，也就是Unicode编码的大端字节序 ；
func SetConsoleOutputCP(cp uint32) error {
	kernel32 := windows.NewLazyDLL("kernel32.dll")
	proc := kernel32.NewProc("SetConsoleOutputCP")
	r, _, err := proc.Call(uintptr(cp))
	if r == 0 {
		return err
	}
	return nil
}
